function parse(ts) {
  const t = ts[0];
  ts.shift();

  if (t.type === Type.braceLeft) {
    const obj = {};
    while (ts[0].type !== Type.braceRight) {
      const k = ts[0];
      const _colon = ts[1];

      // 确保 k.type 必须是 string
      // 确保 _colon 必须是 colon
      ts.shift();
      ts.shift();

      const v = parse(ts);
      obj[k] = v;

      // 吃一个 逗号
      const _comma = ts[0];
      if (_comma.type === Type.comma) {
        ts.shift();
      }
    }

    // 结束 删除末尾的 '}'
    ts.shift();
    return obj;
  } else if (t.type === Type.bracketLeft) {
    const l = [];
    while (ts[0].type !== Type.bracketRight) {
      const v = parse(ts);

      // 吃一个 逗号
      const _comma = ts[0];
      if (_comma.type === Type.comma) {
        ts.shift();
      }

      l.push(v);
    }

    // 删除末尾的 ']'
    ts.shift();
    return l;
  } else {
    // console.log('value: ', t);
    return t;
  }
}

// 示例
// const exampleTokens = [
//   new Token(Type.braceLeft, "{"),
//   new Token(Type.string, "key"),
//   new Token(Type.colon, ":"),
//   new Token(Type.number, 42),
//   new Token(Type.comma, ","),
//   new Token(Type.string, "name"),
//   new Token(Type.colon, ":"),
//   new Token(Type.string, "John"),
//   new Token(Type.braceRight, "}"),
//   new Token(Type.comma, ","),
//   new Token(Type.bracketLeft, "["),
//   new Token(Type.number, 1),
//   new Token(Type.comma, ","),
//   new Token(Type.number, 2),
//   new Token(Type.bracketRight, "]"),
// ];

// const parsedResult = parse(exampleTokens);
// console.log(parsedResult);
